Skip to content

feat(datastore): add support for request tags - #13732

Merged
jinseopkim0 merged 13 commits into
googleapis:mainfrom
rahulmane-goog:feat-datastore-request-tags
Aug 10, 2026
Merged

feat(datastore): add support for request tags#13732
jinseopkim0 merged 13 commits into
googleapis:mainfrom
rahulmane-goog:feat-datastore-request-tags

Conversation

@rahulmane-goog

@rahulmane-goog rahulmane-goog commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

This PR introduced sending request tags for different datastore requests. The tags can be passed using 2 mechanisms:

  1. Instance Level tags.
  2. Request Level tags.
  • RequestOptions is the proto that holds all the instance and request level tags and is a part of all request protos.
  • DatastoreOptions allows the ability to set the instance level tags using setRequestTags. Any operation executed via this Datastore client automatically includes these global request tags in the outbound RPC request payload.
  • RequestOptionsHelper an internal utility that combines instance-level tags from DatastoreOptions with any request-level RequestOptions protobuf message before building the wire request.
  • DatastoreExecutionOptions is a holder object for all different options like ExplainOptions, RequestOptions and ReadOption.
  • Overloaded versions for taking in the DatastoreExecutionOptions for each of the following operations:
    • put
    • get
    • fetch
    • delete
    • newTransaction
    • commit
    • rollback
    • allocateId
    • reserveIds
    • runQuery
    • runAggregationQuery
  • Each of these overloaded versions copy the request tags into the request protos.

@rahulmane-goog
rahulmane-goog requested review from a team as code owners July 13, 2026 13:26

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces support for passing and merging RequestOptions (such as request tags) in Datastore queries and aggregation queries, allowing both instance-level and request-level tags to be propagated. The feedback highlights a critical issue where instance-level tags are ignored when query-level RequestOptions are not explicitly provided in QueryResultsImpl and AggregationQueryRequestProtoPreparer. Additionally, the reviewer suggests simplifying the varargs withRequestTags overload in Datastore by delegating to the List version, and adding a test case to verify that instance-level tags are correctly populated and sent with queries.

@rahulmane-goog
rahulmane-goog force-pushed the feat-datastore-request-tags branch from f124116 to aab1fd3 Compare July 13, 2026 13:43

@rahulmane-goog rahulmane-goog left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please review

@lqiu96 lqiu96 added the kokoro:force-run Add this label to force Kokoro to re-run the tests. label Jul 13, 2026
@yoshi-kokoro yoshi-kokoro removed the kokoro:force-run Add this label to force Kokoro to re-run the tests. label Jul 13, 2026
@jinseopkim0

Copy link
Copy Markdown
Contributor

ci / lint is failing. Could you please take a look?

@rahulmane-goog

Copy link
Copy Markdown
Contributor Author

ci / lint is failing. Could you please take a look?

Fixed

@rahulmane-goog
rahulmane-goog force-pushed the feat-datastore-request-tags branch 3 times, most recently from d61b477 to 75e872b Compare July 16, 2026 10:12
@lqiu96

lqiu96 commented Aug 4, 2026

Copy link
Copy Markdown
Member

/gcbrun

@yoshi-kokoro yoshi-kokoro removed the kokoro:force-run Add this label to force Kokoro to re-run the tests. label Aug 4, 2026
@rahulmane-goog
rahulmane-goog force-pushed the feat-datastore-request-tags branch from 23f547e to 8a810e8 Compare August 5, 2026 06:57
@rahulmane-goog
rahulmane-goog force-pushed the feat-datastore-request-tags branch from 0499132 to aa1b0ef Compare August 6, 2026 05:32
@rahulmane-goog

Copy link
Copy Markdown
Contributor Author

Last lint issue:

[ERROR] To fix formatting errors, run "mvn com.spotify.fmt:fmt-maven-plugin:format"
[ERROR] Non complying file: /home/runner/work/google-cloud-java/google-cloud-java/java-datastore/google-cloud-datastore/src/main/java/com/google/cloud/datastore/TransactionImpl.java
[ERROR] Non complying file: /home/runner/work/google-cloud-java/google-cloud-java/java-datastore/google-cloud-datastore/src/main/java/com/google/cloud/datastore/ReadOption.java
[ERROR] Non complying file: /home/runner/work/google-cloud-java/google-cloud-java/java-datastore/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreImpl.java
[ERROR] Non complying file: /home/runner/work/google-cloud-java/google-cloud-java/java-datastore/google-cloud-datastore/src/main/java/com/google/cloud/datastore/execution/AggregationQueryExecutor.java
[ERROR] Non complying file: /home/runner/work/google-cloud-java/google-cloud-java/java-datastore/google-cloud-datastore/src/main/java/com/google/cloud/datastore/RequestOptionsHelper.java
[ERROR] Non complying file: /home/runner/work/google-cloud-java/google-cloud-java/java-datastore/google-cloud-datastore/src/main/java/com/google/cloud/datastore/QueryResultsImpl.java
[ERROR] Non complying file: /home/runner/work/google-cloud-java/google-cloud-java/java-datastore/google-cloud-datastore/src/main/java/com/google/cloud/datastore/Datastore.java
[ERROR] Non complying file: /home/runner/work/google-cloud-java/google-cloud-java/java-datastore/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreOptions.java
[ERROR] Non complying file: /home/runner/work/google-cloud-java/google-cloud-java/java-datastore/google-cloud-datastore/src/test/java/com/google/cloud/datastore/AbstractDatastoreTest.java
[ERROR] Non complying file: /home/runner/work/google-cloud-java/google-cloud-java/java-datastore/google-cloud-datastore/src/test/java/com/google/cloud/datastore/models/RequestOptionsTest.java
[ERROR] Non complying file: /home/runner/work/google-cloud-java/google-cloud-java/java-datastore/google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/AbstractITDatastoreTest.java

Ran the command and fixed lint issues

@jinseopkim0

Copy link
Copy Markdown
Contributor

/gcbrun

@jinseopkim0 jinseopkim0 added kokoro:force-run Add this label to force Kokoro to re-run the tests. kokoro:run Add this label to force Kokoro to re-run the tests. labels Aug 7, 2026
@yoshi-kokoro yoshi-kokoro removed kokoro:run Add this label to force Kokoro to re-run the tests. kokoro:force-run Add this label to force Kokoro to re-run the tests. labels Aug 7, 2026
@jinseopkim0

Copy link
Copy Markdown
Contributor

/gcbrun

@jinseopkim0 jinseopkim0 added kokoro:force-run Add this label to force Kokoro to re-run the tests. kokoro:run Add this label to force Kokoro to re-run the tests. labels Aug 10, 2026
@yoshi-kokoro yoshi-kokoro removed kokoro:run Add this label to force Kokoro to re-run the tests. kokoro:force-run Add this label to force Kokoro to re-run the tests. labels Aug 10, 2026
@jinseopkim0
jinseopkim0 merged commit b1f6186 into googleapis:main Aug 10, 2026
214 checks passed
@rahulmane-goog
rahulmane-goog deleted the feat-datastore-request-tags branch August 11, 2026 05:12
lqiu96 pushed a commit that referenced this pull request Aug 24, 2026
🤖 I have created a release *beep* *boop*
---


<details><summary>1.90.0</summary>

##
[1.90.0](v1.89.0...v1.90.0)
(2026-08-24)


### Features

* **bigquery-jdbc:** implement TypeRegistry and TypeDescriptor
([#13947](#13947))
([0557e69](0557e69))
* **bigquery:** add QueryResultsFormat and ArrowSerializationOptions
configurations
([#13942](#13942))
([ff03e19](ff03e19))
* **bigquery:** expose `StatementType` and query execution stats on
`TableResult`
([#14145](#14145))
([7d16de8](7d16de8))
* **bigtable:** enable microsecond timestamps in client
([#14057](#14057))
([57aaf8d](57aaf8d))
* **bigtable:** route single-entry MutateRows through a point-write c…
([#14028](#14028))
([a403703](a403703))
* **datastore:** add support for request tags
([#13732](#13732))
([b1f6186](b1f6186))
* **ftp:** onboard a new library
([#14068](#14068))
([f41b2d9](f41b2d9))
* **gax:** add ResumableUploadCallable and ResumableUploadCallSettings
([#14052](#14052))
([a5e26e8](a5e26e8))
* **google/cloud/biglake/hive/v1:** onboard a new library
([#14130](#14130))
([650c839](650c839))
* **google/maps/mapmanagement/v2:** onboard a new library
([#14131](#14131))
([7d00726](7d00726))
* **spanner:** support user-provided OpenTelemetry for client metrics
export
([#13741](#13741))
([da74dee](da74dee))
* update API sources and regenerate
([#14000](#14000))
([9337a93](9337a93))
* **workloadidentity:** onboard a new library
([#14060](#14060))
([ab226ee](ab226ee))


### Bug Fixes

* add documentation for insertall api that there's no default retry
([#13953](#13953))
([1fdb4f1](1fdb4f1))
* add retry behavior documentation to insertall interface to clarify the
behavior
([#14058](#14058))
([1b8f9e3](1b8f9e3))
* **auth:** fix JSpecify nullability in UserAuthorizer and TokenStore
([#14150](#14150))
([0d5fac0](0d5fac0))
* **auth:** fix remaining nullability in UserAuthorizer and Builder
([#14158](#14158))
([a51bb8d](a51bb8d))
* **auth:** refine JSpecify nullability for ServiceAccountCredentials
and UserCredentials
([#14159](#14159))
([a929250](a929250))
* **bigquery-jdbc:** enable ITOpenTelemetryTest
([#13991](#13991))
([fa6641b](fa6641b))
* **bigquery-jdbc:** pass connection proxy settings to OpenTelemetry
exporters
([#14011](#14011))
([115b9b3](115b9b3))
* **bigquery-jdbc:** session context propagation when session is enabled
([#14161](#14161))
([1e74dda](1e74dda))
* **bigtable:** remove heartbeat miss logging
([#14054](#14054))
([ec17637](ec17637))
* **deps:** update dependency
com.google.apis:google-api-services-bigquery to v2-rev20260731-2.0.0
([#14149](#14149))
([95f6c38](95f6c38))
* **deps:** update dependency com.google.cloud:libraries-bom to v26.86.0
([#14103](#14103))
([cf5697e](cf5697e))
* **gax-httpjson:** reduce Conscrypt fallback error to debug level
([#13962](#13962))
([8236771](8236771))
* **gax-httpjson:** remove unsupported and deprecated PQC named groups
([#14107](#14107))
([7604971](7604971))
* **gax:** register Conscrypt SSLContext SPI classes for GraalVM
reflection
([#14129](#14129))
([73c0243](73c0243))
* **samples:** align native profile junit and surefire versions with
shared config
([#14096](#14096))
([2b84133](2b84133))
* **spanner:** add closeAsync to ReadContext and make transaction
closing non-blocking
([#14076](#14076))
([671f892](671f892))
* **spanner:** scope server-timing metrics per call and guard
interceptor lifecycle callbacks
([#14053](#14053))
([f35c570](f35c570))
* **storage:** use JsonUtils for StorageObject serialization in
resumable writes and read channels
([#13976](#13976))
([d94922f](d94922f))


### Performance Improvements

* **bigquery-jdbc:** eliminate dry run to resolve statement type
([#14156](#14156))
([7109ecd](7109ecd))
* **spanner-jdbc:** cache commonly used query parameter names
([#14036](#14036))
([1eb6aa3](1eb6aa3))
* **spanner-jdbc:** cache JDBC metadata query strings
([#14041](#14041))
([31c628f](31c628f))
* **spanner-jdbc:** cache positional to named param conversion
([#14034](#14034))
([30e031b](30e031b))


### Dependencies

* **gax-httpjson:** upgrade conscrypt-openjdk-uber to 2.6.2
([#14117](#14117))
([2f5481a](2f5481a))
* Update gRPC to v1.82.3
([#13997](#13997))
([a786107](a786107))
* Upgrade gRPC to v1.82.4
([#14088](#14088))
([0c482fe](0c482fe))


### Documentation

* **bigquery-jdbc:** add user guide with connection property and custom
endpoint reference
([#13878](#13878))
([2dde172](2dde172))
* **gax:** update LRO troubleshooting documentation link
([#14108](#14108))
([4c5bbae](4c5bbae))
* **spanner-jdbc:** update connection_properties.md documentation
([#14035](#14035))
([b576fe8](b576fe8))
* **spanner:** update CHANGELOG.md for releases 6.117.0 through 6.120.0
([#13970](#13970))
([2413811](2413811))
</details>

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

---------

Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants